
import axios from 'axios'
import { ElMessage } from 'element-plus';
import useUserStore from '@/store/user'


// let userStore = useUserStore(pinia)

axios.defaults.withCredentials=true;  // 允许请求携带cookie参数
const http = axios.create({
    // baseURL:'http://192.168.0.16:2233/api/',  // 设置基础路径
    baseURL:'http://192.168.0.86:2233/api/',  // 设置基础路径
    timeout:10000,  // 设置超时时间为10秒
});

// 获取csrftoken,django发送post请求时需要csrf认证
async function get_csrftoken(){
    await http({
        url:'get_csrftoken/',
        method:'get'
    }).then(res=>{
        
    })
    
    let cookie_list = document.cookie.split(';')
    let csrf_token = ''
    cookie_list.forEach((item,index)=>{
    if(item.split('=')[0]=="csrftoken"){
        csrf_token = item.split('=')[1]
    }
    })
    return csrf_token
}





// 请求拦截器
http.interceptors.request.use(async (config)=>{
    // 请求拦截器，可以在这里面设置请求头等配置信息

    let userStore = useUserStore()
    if(config.method=='POST' || config.method=='post' || config.method=='PUT' || config.method=='put'||
    config.method=='DELETE' || config.method=='delete'
    ){
        // 如果是post请求，则先获取csrftoken，django发送post请求需要验证请求头中的csrftoken
        let csrf_token= await get_csrftoken()
        config.headers["X-CSRFToken"]=csrf_token
    }
    
    if(userStore.userInfo){
        config.headers.userInfo=userStore.userInfo  // 每次请求都携带userInfo请求头，后端用来做判断
    }
    
    
    
    return config
})

// 响应拦截器
http.interceptors.response.use((response)=>{
    // 可以在这里添加请求成功后执行的操作
    // if(response.data.code != 200){
    //     后端返回的code不等于200时，在拦截器里统一显示错误信息
    //     ElMessage({
    //         type:'error',
    //         message:'请求失败，' + response.data.msg
    //     })
        
    //     return Promise.reject(response.data.msg)
    // }
    
    return response
},(error)=>{
    let message=''
    console.log(error);
    let status = error.response?.status
    switch(status){
        case 401:
            message='token过期'
            break
        case 403:
            message='没有权限访问'
            break
        case 404:
            message='请求地址错误'
            break
        case 500:
            message='服务器错误'
            break
        default:
            message='网络错误'
            break
    }
    // 显示错误信息
    ElMessage({
        type:'error',
        message
    })
    return Promise.reject(error)
})

export default http
// export {get_csrftoken}